package com.flyqiu.form.api.store;

import com.alibaba.fastjson2.JSONObject;
import com.flyqiu.form.model.entity.FlyQiuTableConfig;

/**
 * 子表单数据处理服务接口
 */
public interface FlyQiuAvueDynamicService {

    /**
     * 保存子表数据
     *
     * @param mainTableConfig 主表配置
     * @param mainDataId      主表数据ID
     * @param data            全部数据（包括主表单数据和子表数据）
     */
    void save(FlyQiuTableConfig mainTableConfig, String mainDataId, JSONObject data);

    /**
     * 删除数据
     *
     * @param mainTableConfig 主表配置
     * @param mainDataId      主表数据ID
     */
    void remove(FlyQiuTableConfig mainTableConfig, String mainDataId);

    /**
     * 修改数据
     *
     * @param mainTableConfig 主表配置
     * @param mainDataId      主表数据ID
     * @param data            全部数据（包括主表单数据和子表数据）
     */
    void update(FlyQiuTableConfig mainTableConfig, String mainDataId, JSONObject data);

    /**
     * 查询数据
     *
     * @param mainTableConfig 主表配置
     * @param mainData        主表数据
     */
    void handlerDynamicSelect(FlyQiuTableConfig mainTableConfig, JSONObject mainData);

    /**
     * 同步子表单
     *
     * @param mainTableConfig 主表配置
     */
    void syncDynamicTable(FlyQiuTableConfig mainTableConfig);

    /**
     * 删除表
     *
     * @param mainTableConfig 主表配置
     */
    void deleteTable(FlyQiuTableConfig mainTableConfig);

    /**
     * 子表单处理接口
     */
    interface HandlerDynamicTable {

        /**
         * 处理子表单
         *
         * @param dynamicTableConfig 子表单配置
         * @param dynamic            子表单原始配置
         * @param prop               子表单字段名
         */
        void handler(FlyQiuTableConfig dynamicTableConfig, JSONObject dynamic, String prop);
    }
}
